﻿using System;
using System.Collections.Generic;
using br.com.SistemaChamados.DAO;
using br.com.SistemaChamados.Enum;
using br.com.SistemaChamados.Model;

namespace br.com.SistemaChamados.Controller
{
    public class UnitController
    {
        /// <summary>
        /// Método responsável por inserir uma unidade
        /// </summary>
        /// <param name="unit">A unidade a ser inserida</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState InsertUnit(Unit unit)
        {
            EnumCRUDState stateTransaction = EnumCRUDState.SQL_NOTHING;
            try
            {
                stateTransaction = UnitDAO.InsertUnit(unit);
            }
            catch (Exception ex)
            {
                stateTransaction = EnumCRUDState.SQL_NOTHING;
                throw ex;
            }
            return stateTransaction;
        }

        /// <summary>
        /// Método responsável por atualizar uma unidade
        /// </summary>
        /// <param name="unit">A unidade a ser atualizada</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState UpdateUnit(Unit unit)
        {
            EnumCRUDState stateTransaction = EnumCRUDState.SQL_NOTHING;
            try
            {
                stateTransaction = UnitDAO.UpdateUnit(unit);
            }
            catch (Exception ex)
            {
                stateTransaction = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return stateTransaction;
        }

        /// <summary>
        /// Método responsável por remover uma unidade
        /// </summary>
        /// <param name="unit">A unidade a ser removida</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState DeleteUnit(Unit unit)
        {
            EnumCRUDState stateTransaction = EnumCRUDState.SQL_NOTHING;
            try
            {
                stateTransaction = UnitDAO.DeleteUnit(unit);
            }
            catch (Exception ex)
            {
                stateTransaction = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return stateTransaction;
        }

        /// <summary>
        /// Método responsável por recuperar uma unidade específica
        /// </summary>
        /// <param name="unit">A unidade com o Id preenchido que se deseja recuperar</param>
        /// <returns>unit</returns>
        public Unit GetUnit(Unit unit)
        {
            Unit ValidateUnitSelected = new Unit();
            try
            {
                ValidateUnitSelected = UnitDAO.getUnit(unit.Id);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return ValidateUnitSelected;
        }

        /// <summary>
        /// Método responsável por recuperar todas as unidades
        /// </summary>
        /// <returns>List - Unit</returns>
        public List<Unit> GetUnits()
        {
            List<Unit> Returnedlist = new List<Unit>();
            try
            {
                Returnedlist = UnitDAO.getUnits();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return Returnedlist;
        }
        
    }
}